package qc.module.qms.algorithm.NumericCalc.dto;

import lombok.Data;
import qc.common.core.enums.qms.*;

/**
 * QMS数值计算最终采用/采纳的计算方法关联的输入时序数据配置
 *
 * @author QuCheng Tech
 * @since 2025/9/9
 */
@Data
public class QmsNumericCalcUseMethodInputTsDatas {
    /**
     * 记录ID，方便日志和输出中进行唯一标识
     */
    private String id;
    /**
     * 站点关系;同点号站点、上级站点、所有下级站点、特殊关联关系站点
     */
    private QmsQueryPointDataStationRelationTypeEnum stationrelate;
    /**
     * 站点类型编码;同点号站点时为空
     */
    private String stationctgcode;
    /**
     * 站点扩展标记;站点作为上级站点的扩展标记，如表示站点作为所属电站的坝上/尾水/入库站
     * 不需要单独设置是否取备用站点（备用点好）属性，在实际配置中先通过主备站点（冗余站点点号或多通道点号）将点号数据合并到一个最终使用的，在其他需要用到该点号数据的只需要取唯一的一个点号数据即可
     */
    private String stationext;
    /**
     * 是否与目标点号要素相同;同点号要素、指定其他要素编码
     * QmsCalcMethodInputElementRelationTypeEnum，是否不需要单独定义为枚举类型，只需要bool类型表示是否为与计算点号同要素
     */
    private Boolean elesame;
    /**
     * 要素编码
     */
    private String elecode;
    /**
     * 监测要素扩展标记;根据监测要素和扩展标记从站点与点号关联关系中获取点号
     */
    private String eleext;
    /**
     * 点号时段类型;与计算点号相同时段、比计算点号小的下一个时段、指定的时段
     */
    private QmsQueryPointDataTimeSegmentTypeEnum tmsegtype;
    /**
     * 时段类型;点号时段类型为指定时段类型时使用该属性值
     */
    private QmsPointTimeSegmentEnum tmseg;
    /**
     * 取数据值类型;默认为取value字段值，可设置为取时段初、末值或最值其中之一
     */
    private QmsPointValueFieldEnum valuefield;
    /**
     * 输入的顺序号;计算输入的数据按给定的顺序进行输入
     */
    private Integer odr;
    /**
     * 查询点号数据时间类型;对应时间点、最近一条、时间段数据
     */
    private QmsQueryPointDataTimeRangeTypeEnum tmrange;
    /**
     * 查询点号数据起始时间偏移
     */
    private Integer tmbeginoffset;
    /**
     * 不包含起始时间点
     */
    private Boolean excludebegintm;
    /**
     * 查询点号数据截止时间偏移
     */
    private Integer tmendoffset;
    /**
     * 不包含截止时间点；一般应配置为true（不包含截止时间点）；
     * 比如：计算目标为日数据，2025-9-27；提取输入数据如为小时/实时数据，提取输入数据的时间段为：2025-9-27 00:00:00~2025-9-28 00:00:00
     */
    private Boolean excludeendtm;
    /**
     * 是否需要起始时间最近一条数据
     */
    private Boolean needbegintmlatest;
    /**
     * 起始时间最近一条数据最长时段数;
     * 为0表示不往前取数据，只取开始时间点的数据
     * 为负值表示不限制往前的时间，取不大于开始时间点的最新一条数据
     * 为正整数表示限制往前的时段数
     */
    private Integer begintmlatestoffset;
}
